﻿using FreeSql;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FreeSql
{
    public class DbConfig
    {
        /// <summary>
        /// 
        /// </summary>
        public string AppKey { get; set; } = "admin";
        /// <summary>
        /// 机器码，最重要参数，无默认值，必须 全局唯一（或相同 DataCenterId 内唯一），必须 程序设定，缺省条件（WorkerIdBitLength取默认值）时最大值63，理论最大值 2^WorkerIdBitLength-1（不同实现语言可能会限定在 65535 或 32767，原理同 WorkerIdBitLength 规则）。不同机器或不同应用实例 不能相同，你可通过应用程序配置该值，也可通过调用外部服务获取值。针对自动注册WorkerId需求，本算法提供默认实现：通过 redis 自动注册 WorkerId 的动态库，详见“Tools\AutoRegisterWorkerId”。
        /// </summary>
        public ushort WorkerId { get; set; }  

        /// <summary>
        /// 机器码位长，决定 WorkerId 的最大值，默认值6，取值范围 [1, 19]，实际上有些语言采用 无符号 ushort (uint16) 类型接收该参数，所以最大值是16，如果是采用 有符号 short (int16)，则最大值为15。
        /// </summary>
        public int WorkerIdBitLength { get; set; } = 6;
        

        /// <summary>
        /// 监听Curd操作
        /// </summary>
        public bool WatchCurd { get; set; }

        /// <summary>
        /// 不使用参数化
        /// </summary>
        public bool NoneCommandParameter { get; set; } = false;

         
        /// <summary>
        /// 同步表结构
        /// </summary>
        public bool SyncStructure { get; set; } = false;
        /// <summary>
        /// 初始化种子数据
        /// </summary>
        public bool SeedData { get; set; } = false;


        /// <summary>
        /// 分表开始时间
        /// </summary>
        public DateTime BegDate { get; set; } = DateTime.Now.Date;

        /// <summary>
        /// 
        /// </summary>
        public static DateTime DbBegDate { get; set; } = DateTime.Now.Date;

        /// <summary>
        /// 数据类型
        /// </summary>
        public DataType DataType { get; set; }

        /// <summary>
        /// 连接字符串
        /// </summary>
        public string ConnectionString { get; set; } = "";


        /// <summary>
        /// 从库
        /// </summary>
        public List<Slave>? Slaves { get; set; }

        /// <summary>
        /// 从库
        /// </summary>
        public class Slave
        {
            /// <summary>
            /// 连接字符串
            /// </summary>
            public string ConnectionString { get; set; } = "";
            /// <summary>
            /// 权重
            /// </summary>
            public int Weight { get; set; } = 1;
        }
    }
}
